package com.egghiro.j2se.game.scardbattle.model.character.monster;

import com.egghiro.framework.j2se.game.core.SMath;
import com.egghiro.j2se.game.scardbattle.controller.action.ai.MonsterAI;
import com.egghiro.j2se.game.scardbattle.controller.action.ai.RateMonsterAI;
import com.egghiro.j2se.game.scardbattle.model.character.GameCharacter;
import com.egghiro.j2se.game.scardbattle.param.Message;
import com.egghiro.j2se.game.scardbattle.view.console.CardBattleConsoleView;

public class KingSlime extends Slime {

    public KingSlime() {
        super("スライムキング", 300, 200, 999, 9999);
    }
    
    @Override
    public int magic(GameCharacter target) {
        int monsterAttackPoint = 0;
        this.setMp(this.getMp() - 60);
        if(this.getMp() < 0){
            this.setMp(0);
            CardBattleConsoleView.getInstance().showMessage(Message.MSG_MAGIC_START_NG);
        } else {
            monsterAttackPoint = SMath.nextInt(1, 70);
            target.subtractHp(monsterAttackPoint);
        }
        
        return monsterAttackPoint;
    }

    @Override
    public int attack(GameCharacter target) {
        int damage = SMath.nextInt(0, 40);
        target.subtractHp(damage);
        return damage;
    }

//    @Override
//    public void act() {
//        // 1～10までの乱数を生成
//        int actNum = SMath.nextInt(1, 10);
//        int monsterAttackPoint = 0;
//
//        if (actNum >= 1 && actNum <= 3) {
//            // 30%の確率で魔法攻撃
//            System.out.print(this.getName() + Message.MSG_MAGIC_START);
//            monsterAttackPoint = this.magic(this.target());
//            if (monsterAttackPoint > 0) {
//                System.out.println(monsterAttackPoint + Message.MSG_MONSTER_ATTACK_END);
//            }
//            // return true;
//        } else if (actNum >= 4 && actNum <= 7) {
//            // 40%の確率で逃げる
//            System.out.println(this.getName() + Message.MSG_BATTLE_ESCAPE);
//            // return false;
//            // TODO 逃げる
//        } else{
//    
//            // 通常攻撃
//            monsterAttackPoint = this.attack(this.target());
//            System.out.print(this.getName() + Message.MSG_ATTACK_START);
//            System.out.println(monsterAttackPoint + Message.MSG_MONSTER_ATTACK_END);
//            // return true;
//        }
//    }
    
    @Override
    protected  MonsterAI createDefaultAI() {
        // TODO
        return new RateMonsterAI(this){
            @Override
            public void act() {
                // 1～10までの乱数を生成
                int actNum = SMath.nextInt(1, 10);
                int monsterAttackPoint = 0;

                if (actNum >= 1 && actNum <= 3) {
                    // 30%の確率で魔法攻撃
                    System.out.print(monster.getName() + Message.MSG_MAGIC_START);
                    monsterAttackPoint = monster.magic(monster.target());
                    if (monsterAttackPoint > 0) {
                        System.out.println(monsterAttackPoint + Message.MSG_MONSTER_ATTACK_END);
                    }
                    // return true;
                } else if (actNum >= 4 && actNum <= 7) {
                    // 40%の確率で逃げる
                    System.out.println(monster.getName() + Message.MSG_BATTLE_ESCAPE);
                    // return false;
                    // TODO 逃げる
                } else{
            
                    // 通常攻撃
                    monsterAttackPoint = monster.attack(monster.target());
                    System.out.print(monster.getName() + Message.MSG_ATTACK_START);
                    System.out.println(monsterAttackPoint + Message.MSG_MONSTER_ATTACK_END);
                    // return true;
                }
            }
        };
    }

}
